/**
 * @file 工单列表
 * @author yangjiangming <449654337@qq.com>
 * @date 2018/11/27 10:20:40
 */

var dependsList = [
    'element', 'layer', 'form',
    'table', 'select2', 'zmnUtils', '$http',
    'zmnTable', 'formSelects', 'oms_comment_modifier', 'zmnSearch', 'zmnSelect'
];

layui.extend({
    oms_comment_modifier: 'comment/zmn.oms.comment.modifier'
}).define(dependsList, function (exports) {
    var $ = layui.$;
    var form = layui.form;
    var layer = layui.layer;
    var table = layui.table;
    var zmnTable = layui.zmnTable;
    let zmnSelect = layui.zmnSelect;
    var zmnSearch = layui.zmnSearch;

    var formSelects = layui.formSelects;
    var element = layui.element;
    var $http = layui.$http;

    var tableConfig = layui.oms_comment_modifier.tableConfig;
    var modifier = layui.oms_comment_modifier.modifier;

    var tableInstance = null;
    // 当前操作的工单
    window.currentWork = {};

    let json = {
        vo: {
            limitPermit: false,
            companyId: null,
            spCompanyId: null,
        }
    };

    // 多工程师远程查询 URL
    var MASTER_LIST_URL = '/staff/master/list.action';

    var datePickerSelectorArray = [
        'receiveTime', // 接单时间
        'dutyTime', // 预约时间
        'distributeTime', // 派单时间
        'visitTime', // 上门时间
        'takerTime', // 领单时间
        'completeTime', // 收单时间
        'checkoutTime', // 收单时间
        'accountTime', // 算账时间
        'replyVisitTime', // 回访时间
        'partReimburseTime', // 配件报销时间
        'refundAmountTime', // 退款时间
        'cancelTime', // 取消时间
        'masterReviewTime', // 工程师审核时间
        'platReviewTime', // 后台审核
        'commentTime' // 评价时间
    ];

    var multipleSelectNameArray = [
        'cityIdList',
        'channelIdList',
        'factoryIdList'
    ];

    /**
     * 初始页时间选择器
     * @private
     */
    function _initALLDatePickers () {
        zmnSearch.renderDatePicker(datePickerSelectorArray);
    }

    /**
     * 渲染表格
     * @param {object} params 查询参数
     * @param {array} data 表格数据
     * @returns {object}
     */
    var renderTable = (function ($) {
        var defaultConfig = $.extend({
            id: 'zmn-work-table',
            elem: '#zmn-work-table',
            method: 'POST',
            contentType: 'application/json;charset=utf-8',
            limit: 100,
            limits: [100],
            data: null,
            cols: table.getConfig('zmn-work-table').cols,
            parseData: function (res) {
                var count = res.data ?  res.data.count : 0;
                $('.layui-this').find('.count').text('（共 ' + count + ' 条）');

                return {
                    "code": res.status, //解析接口状态
                    "msg": res.message, //解析提示文本
                    "count": res.data ? (res.data.count > 10000 ? 10000 : res.data.count) : 0, //解析数据长度
                    "data": res.data ? res.data.data : [] //解析数据列表
                };
            },
            done: function (res, curr, count) {
                modifier.setDataList(res.data);
                modifier.initOperatePanel({}, function ($elem) {
                    var orderId = $elem.data('order-id');
                    var workId = $elem.data('order-id');

                    var params = {
                        orderId: orderId,
                        workId: workId,
                    };

                    return params;
                });

                // initCompanyInfoHoverTips();
            }
        }, tableConfig.config);

        return function (params, data) {
            var where = { where: $.extend({}, tableConfig.orderObj,  params) };
            var config = $.extend({}, defaultConfig,  where, { data: data });

            return zmnTable.init({
                config: config,
                filter: 'zmn-work-table',

                event: function () {
                    table.on('tool(zmn-work-table)', function(rowObj){
                        if (rowObj.event === 'operate') {
                            updateRowData(rowObj);
                        }
                    });

                    table.on('rowDouble(zmn-work-table)', function (rowObj) {
                        modifier.setCurrentDataByParams(rowObj.data);

                        // modifier.openHomeDialog(function () {
                        // });
                    });

                    // 监听头工具栏事件
                    table.on('toolbar(zmn-work-table)', function (obj) {
                    });
                }
            });
        }

    })($);

    var getters = {
        getCompanyId: () => $('#companyId').val()
    };

    /**
     * 搜索框搜索方法
     * @param {object} params 查询参数
     */
    function searchForTable (params, data) {
        $('#tab-content').find('.layui-tab-item:first').removeClass('layui-show');
        tableInstance = renderTable(params, data);
    }

    /**
     * 获取工单信息
     * @param {object} params 查询参数
     * @param {function} cb 回调函数
     */
    function fetchWorkInfo (params) {
        return $http.$get(tableConfig.rowURL, params);
    }

    /**
     * 根据工单 id 更新行数据
     * @param workId
     */
    function updateRowDataByWorkId () {
    };

    window.updateRowDataByWorkId = updateRowDataByWorkId;

    /**
     * 更新表格单行数据
     * @param rowObj 表格数据行对象
     * @param data 行数据
     */
    function updateRowData (rowObj, data) {
        if (!rowObj) {
            return;
        }

        if (data) {
            rowObj.update(data);
            return;
        }

        fetchWorkInfo({ id: rowObj.data.workId }).done(function (info) {
            rowObj.update(info);
            rowObj.update(info);

            var $tr = $(rowObj.tr);

            $tr.css('backgroundColor', 'RGBA(0, 139, 125, .2)').siblings().css('backgroundColor', '');

            initWarningHoverTips($tr.find('.warning'));
            initAddressHoverTips($tr.find('.btn-address'));
            initRemarkHoverTips($tr.find('.btn-remark'));
        });
    }

    /**
     * 标准化搜索参数
     * @param {object} field 参数
     */
    function normalizeSearchParams (field) {
        var params = {};

        // 整理时间
        datePickerSelectorArray.forEach(function (keyword) {
            var startSelector = keyword + '.start';
            var endSelector = keyword + '.end';

            if ($('#' + keyword + 'Start').closest('.date-picker-item').hasClass('inline-block'))  {
                var startTime = field[startSelector];
                var endTime = field[endSelector];

                if (startTime || endTime) {
                    startTime = startTime ? startTime + ' ' + '00:00:00' : '';
                    endTime = endTime ? endTime + ' ' + '23:59:59' : '';

                    params[keyword] = startTime + ',' + endTime;
                }
            }

            field[startSelector] = '';
            field[endSelector] = '';
        });

        // 整理工单号
        if (field['code'] && field['code'].length) {
            if (field['code'].length > 19) {
                field['code'] = field['code'].substring(0, 19);
            }

            if (field['code'].length === 6) {
                params['codeEnd6'] = field['code'];
                field['code'] = '';
            }
        }

        // 整理操作类型、操作员
        if (field['operate.operateType'] || field['operate.operatorId']) {
            params['operate'] = {
                operateType: field['operate.operateType'],
                operatorId: field['operate.operatorId']
            };

            field['operate.operateType'] = null;
            field['operate.operatorId'] = null;
        }

        // 整理加单工程师
        if (field['addMaster.operatorId']) {
            params['addMaster'] = {
                operatorId: field['addMaster.operatorId']
            };

            field['addMaster.operatorId'] = null;
        }

        // 整理优惠
        if (field['discount.discountCateg'] || field['discount.discountType']) {
            params['discount'] = {
                discountCateg: field['discount.discountCateg'],
                discountType: field['discount.discountType']
            };

            field['discount.discountCateg'] = null;
            field['discount.discountType'] = null;
        }

        // 拷贝非空字段
        Object.keys(field).filter((key) => {
            if (field[key]) {
                if (multipleSelectNameArray.indexOf(key) !== -1) {
                    params[key] = field[key].split(',');
                } else {
                    params[key] = field[key];
                }
            }
        });

        return params;
    }

    /**
     * 初始化页面事件
     */
    function initEvent () {
        $('body').on('blur', 'input', function () {
            var $this = $(this);
            $this.val($this.val().replace(/(^\s*)|(\s*$)/g, ''));
        });

        // 监听重置按钮点击
        $('#btn-clean').on('click', function () {
            setTimeout(function () {
                $('input:not([type="checkbox"][lay-filter="datepicker"])').val('');
                $('select').val('');

                var $multiSlectList = $('select[xm-select]');
                $multiSlectList.each(function () {
                    var xmSelect = $(this).attr('xm-select');
                    formSelects.value(xmSelect, []);
                });

                initAllRemoteSelectBySelect2();
                form.render('select');
            }, 100);
        });

        // 监听时间选择器控制选择框点击事件
        form.on('checkbox(datepicker)', function (data) {
            var $dataPicker = $('.date-picker-item').eq(data.value);
            if (data.elem.checked) {
                $dataPicker.addClass('inline-block').find('input').attr('disabled', false);
            } else {
                $dataPicker.removeClass('inline-block').find('input').attr('disabled', false);;
            }

            form.render();
        });

        // 监听查询表单提交事件
        form.on('submit(submit-search)', function (obj) {
            var params = normalizeSearchParams(obj.field);

            if (!Object.keys(params).length) {
                layer.msg('请至少选择一个查询条件');
                return false;
            }

            // tableInstance.search(params);
            searchForTable(params);
            return false;
        });

        // 监听查询表单导出事件
        form.on('submit(submit-export)', function (obj) {
            var params = normalizeSearchParams(obj.field);

            if (!Object.keys(params).length) {
                layer.msg('请至少选择一个查询条件');
                return false;
            }

            if (!tableConfig.exportURL) {
                layer.msg('请添加导出 URL');
                return false;
            }

            layer.tips('至多导出 5000 条', obj.elem, {
                success: function () {
                    setTimeout(function () {
                        layui.zmnUtils.exportFile(tableConfig.exportURL, params);
                    }, 300);
                }
            });

            return false;
        });

        element.on('tab(workListTabBrief)', function (obj) {
            var type = $(this).data('type');

            if (type === -1) {
                return;
            }

            renderTable({ tabType: type });
        });
    }

    function checkExistId(id) {
        let $id = $('#' + id);
        return $id.length > 0;
    }

    /**
     * 初始化页面所有下拉框
     */
    function initAllSelect () {
        // 子公司
        if (checkExistId('companyIdList')) {
            zmnSelect.selectSubCompany('companyIdList', {
                isRadio: true,
                remote: {
                    events: {
                        extendParams: function () {
                            return {
                                "plat": plat, //平台标识(必填)：Integer类型；null不限
                            }
                        }
                    }
                },
                events: {
                    changed: function (values) {
                        console.log("==========companyIdList=========");
                        console.log("已选中的值:" + values);
                        json.vo.companyId = zmnUtil.isArray(values) && values.length > 0 ? values[0] : null;
                    }
                }
            });
        }


        // 城市
        if (checkExistId('cityIdList')) {
            zmnSelect.selectCity('cityIdList', {
                tips: "-选择城市-",
                isReload: true
            });
        }

        // 工程师
        if (checkExistId('masterId')) {
            zmnSelect.searchEngineer('masterId', {
                isRadio: true,
                remote: {
                    limitPermit: json.vo.limitPermit,
                    events: {
                        extendParams: function () {
                            return {
                                plat: plat,
                                companyId: json.vo.companyId,
                                spCompanyId: json.vo.spCompanyId
                            }
                        }
                    }
                },
                events: {
                    changed: function (values) {
                        console.log("========engineerIds=========")
                        console.log("已选中的值:" + values)
                    }
                }
            });
        }

        // 服务分类
        if (checkExistId('servCategId')) {
            zmnSelect.selectServCategory('servCategId', {
                isRadio: true
            });
        }

        // 渠道
        if (checkExistId('channelIdList')) {
            zmnSelect.searchChannel('channelIdList', {
                remote: {
                    events: {
                        extendParams: function () {
                            return {
                                "rank": 2, //渠道层级：Integer类型；1-查询一级渠道，2-查询二级渠道,null不限
                            }
                        }
                    }
                }
            });
        }

        // 服务商
        if (checkExistId('manageCompanyId')) {
            zmnSelect.searchSpCompany('manageCompanyId', {
                isRadio: true,
                remote: {
                    limitPermit: json.vo.limitPermit,
                    events: {
                        extendParams: function () {
                            return {
                                plat: plat,
                                type: 10
                            }
                        }
                    },
                },
                events: {
                    changed: function (values) {
                        console.log("==========spCompanyIds=========");
                        console.log("已选中的值:" + values);
                        json.vo.spCompanyId = zmnUtil.isArray(values) && values.length > 0 ? values[0] : null;
                    }
                }
            });
        }

        if (checkExistId('factoryIdList')) {
            zmnSelect.searchFcCompany('factoryIdList', {
                remote: {
                    limitPermit: json.vo.limitPermit,
                    events: {
                        extendParams: function () {
                            return {status: 2}
                        }
                    },
                },
                events: {
                    changed: function (values) {
                        console.log("==========fcCompanyIds=========");
                        console.log("已选中的值:" + values);
                    }
                }
            });
        }

    }

    /**
     * 初始化查询条件
     */
    function initQueryParams() {
        if (!defaultQuery) {
            return;
        }

        tableConfig.defaultParams = {};

        $('.tab-work-list .layui-tab-title li').removeClass('layui-this');

        // 用户id
        if (defaultQuery.userId) {
            tableConfig.defaultParams['userId'] = defaultQuery.userId;
            tableConfig.initialSearch = true;
        }

        // 会员id
        if (defaultQuery.memberId) {
            tableConfig.defaultParams['memberId'] = defaultQuery.memberId;
            tableConfig.initialSearch = true;
        }

        // 工单号
        if (defaultQuery.id) {
            tableConfig.defaultParams['code'] = defaultQuery.id;
            tableConfig.initialSearch = true;
        }
    }

    /**
     * 初始化页面
     */
    function initPage () {

        initAllSelect();

        // 初始化页面所有的日期选择器
        _initALLDatePickers();
        // 初始化查询条件
        initQueryParams();

        // 渲染 table
        if (tableConfig.initialSearch) {
            searchForTable(tableConfig.defaultParams);
        } else {
            searchForTable({}, []);
        }

        $('body').append('<div class="page-loaded"></div>');
    }

    /**
     * 初始化页面
     */
    function init () {
        // 初始化页面事件
        initEvent();

        // 初始化页面数据
        initPage();
    }

    init();
    exports('oms_comment_list');
});
